// 引入store，用于统一设置token参数
import store from '@/store'
import router from '@/router'
import axios from 'axios'
import { Message } from 'element-ui'
const request = axios.create({
  baseURL: 'https://api-hmzs.itheima.net/tj',
  timeout: 5000 // request timeout
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 统一设置token参数
    const token = store.state.user.token
    if (token) {
      config.headers.Authorization = `Bearer ${token} `
    }
    // 配置header参数，content-type为application/json
    config.headers['Content-Type'] = 'application/json'
    return config
  },
  error => {
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    return response.data
  },
  error => {
    // 处理取消请求的情况
    // 当请求被主动取消时（如组件卸载时取消pending请求）
    if (axios.isCancel(error)) {
      return Promise.reject(error)
    }
    
    // 统一处理错误
    // token失效，重新登录,跳转到登录页面
    if (error.response && error.response.status === 401) {
      // 1. 显示过期提示
      Message.error('登录过期，请重新登录')
      // 2. 跳转到登录页面
      router.push('/login')
      // 3. 清除本地存储的用户数据
      store.commit('user/clearUserInfo')
    } 
    // 处理常规业务错误（后端返回的错误信息）
    else if (error.response && error.response.data && error.response.data.msg) {
      // 显示后端返回的具体错误信息
      Message.error(error.response.data.msg)
    } 
    // 处理其他未知错误
    else {
      // 显示通用错误提示
      Message.error('请求失败，请稍后重试')
    }
    // 将错误继续抛出，以便在具体业务中处理
    return Promise.reject(error)
  }
)

// 导出request实例
export default request
